package towork;

import towork.ListNode;

public class testwork1 {
    public boolean chkPalindrome(ListNode A) {
        // write code here
        if(A==null){
            return false;
        }
        if(A.next==null){
            return true;
        }
        ListNode fast=A;
        ListNode slow=A;
        ListNode head=A;
        while(fast!=null&&fast.next!=null){//找到中间节点
            fast=fast.next.next;
            slow=slow.next;
        }
        ListNode cur=slow.next;//不要习惯将代码复杂化 不需要重新创建一个变量去记录cur;

        while(cur!=null){
            ListNode curN=cur;
            curN=cur.next;
            cur.next=slow;
            slow=cur;
            cur=curN;
        }
        //fast只是用来逆转后面数据的
        //这里slow已经走到最后了
        while(head!=slow){
            if(slow.val!=head.val){
                return false;
            }
            if(head.next==slow){//去防止偶数的时候导致死循环
                return true;
            }
            slow=slow.next;
            head=head.next;
        }
        return true;
    }
}
